package com.lichuang.dedao.listenBooks.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lichuang.dedao.listenBooks.entity.InterpreterBook;
import com.lichuang.dedao.listenBooks.entity.ListenBookInterpreter;
import com.lichuang.dedao.listenBooks.entity.ListenBooks;
import com.lichuang.dedao.listenBooks.mapper.CategoryMapper;
import com.lichuang.dedao.listenBooks.mapper.InterpreterBookMapper;
import com.lichuang.dedao.listenBooks.mapper.ListenBookInterpreterMapper;
import com.lichuang.dedao.listenBooks.mapper.ListenBooksMapper;
import com.lichuang.dedao.listenBooks.service.IListenBooksService;
import com.lichuang.dedao.listenBooks.util.BeanUtil;
import com.lichuang.dedao.listenBooks.vo.ListenInterpreterVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 听书 前端控制器
 * </p>
 *
 * @author kangkang
 * @since 2019-07-12
 */
@RestController
@RequestMapping("//listen-books")
public class ListenBooksController {

    //听书
    @Autowired
    ListenBooksMapper listenBooksMapper;

    //解读人
    @Autowired
    InterpreterBookMapper interpreterBookMapper;

    //听书和解读人的中间表
    @Autowired
    ListenBookInterpreterMapper listenBookeInterpreterMapper;

    @Autowired
    private IListenBooksService listenBooksService;

    //注入解读人的controller
    @Autowired
    InterpreterBookController interpreterBookController;

    //注入分类。
    @Autowired
    CategoryMapper categoryMapper;

    QueryWrapper queryWrapper;

    /**
     * 新书上架
     * @return
     */
    @RequestMapping("/selectBooks")
    public List<ListenInterpreterVo> listenBooks(){
        /**
         * 查所有书
         */
        List<ListenBooks> listenBooks=listenBooksMapper.selectList(new QueryWrapper<ListenBooks>().orderByDesc("create_time"));
        //根据新书查是谁解读了这本书，
        List<ListenInterpreterVo> listenInterpreterVos = new ArrayList<>();
        listenInterpreterVos = BeanUtil.copyList(listenBooks,ListenInterpreterVo.class);
        for (ListenInterpreterVo listenInterpreterVo : listenInterpreterVos) {
            //根据书的id，查中间表中解读人的id
            ListenBookInterpreter  interpreterId= sInterpreterId(listenInterpreterVo.getListenBooksId());
            //根据解读人的id，查解读人的信息
            InterpreterBook interpreterBook=interpreterBookController.sInterpreterById(interpreterId.getInterpreterId());
            listenInterpreterVo.setInterTime(interpreterId.getInterTime());
            listenInterpreterVo.setName(interpreterBook.getName());
        }
       return listenInterpreterVos;
    }

    //新书上架，具体的某个书的全部信息包括解读人的信息。
    @RequestMapping("/selectBookAndInterpreterMsg")
    public ListenInterpreterVo sBooksAndInterpreter(@RequestParam("booksId")Integer bookId){

        //根据书的id，查书的具体信息
       ListenBooks listenBooks=listenBooksMapper.selectById(bookId);
       //根据书的id，查解读人的id
        ListenBookInterpreter  interpreterId= sInterpreterId(listenBooks.getListenBooksId());
        //根据解读人的id，查解读人的信息
        InterpreterBook interpreterBook=interpreterBookController.sInterpreterById(interpreterId.getInterpreterId());
        //根据解读人的id，查具体该作者解读多少书
        int count=interpreterBookController.countInterpreterBook(interpreterId.getInterpreterId());
        //判断是否有电子书
        int num=listenBooks.getEBook();
        if(num==0){
            //查电子书的信息。有该听书的电子书了，再调用电子书中的方法，进行vo实体类添加字敦，并赋值。
        }
        ListenInterpreterVo listenInterpreterVo=new ListenInterpreterVo();
        listenInterpreterVo=BeanUtil.copy(listenBooks,ListenInterpreterVo.class);
        listenInterpreterVo.setSumcount(count);
        listenInterpreterVo.setName(interpreterBook.getName());
        listenInterpreterVo.setInterpreterId(interpreterBook.getInterpreterId());
        listenInterpreterVo.setHeadPortrait(interpreterBook.getHeadPortrait());
        listenInterpreterVo.setInterTime(interpreterId.getInterTime());
        return listenInterpreterVo;
    }

    //根据书的id，查中间表中解读人的id
    public  ListenBookInterpreter sInterpreterId(Integer bookId){
        ListenBookInterpreter bookInterpreter=new ListenBookInterpreter();
        bookInterpreter.setListenBooksId(bookId);
        QueryWrapper bookQueryWrapper=new QueryWrapper(bookInterpreter);
        ListenBookInterpreter listenBookInterpreter=listenBookeInterpreterMapper.selectOne(bookQueryWrapper);
        return listenBookInterpreter;
    }

    @RequestMapping("/selectLisenBooksByCategory")
    public List<ListenBooks> selectLisenBooksByCategory(Integer categoryId){
        List<ListenBooks> listenBooks = listenBooksService.selectLisenBooksByCategory(categoryId);
        return listenBooks;
    }
}
